﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using Bastanteo.Negocio;
using Bastanteo.Persistencia.ADO;
using Bastanteo.Domain;



namespace Bastanteo.Negocio
{
    public class BastanteoBL
    {

        BastanteosDAO BastDao = new BastanteosDAO(); 


 

        public Bastanteos RegistrarBastanteo(int bastanteoId, string  ClienteId, string PoderesId,
    int GrupoId, string  BastanteoForma, string BastanteoCombinacion, double BastanteoLimite,
    DateTime BastanteoVigencia)
        {

            Bastanteos _Bastanteo = new Bastanteos();

            if (ClienteId == null || PoderesId == null || GrupoId <=0 || BastanteoForma == null ||
                 BastanteoCombinacion == null || BastanteoLimite <= 0 || BastanteoVigencia ==null )
            {

                throw new DatosInsuficientesException("Algunos datos están vacíos");

            }


            //if (BastDao.Obtener(ClienteId) != null)
            //{
            //    throw new EntidadRepetidaException("Ya existe un cliente registrado con el mismo número de documento");
            //}
            _Bastanteo.BastanteoId = bastanteoId;
            _Bastanteo.ClienteId = ClienteId;
            _Bastanteo.PoderesId = PoderesId;
            _Bastanteo.GrupoId = GrupoId;
            _Bastanteo.BastanteoForma = BastanteoForma;
            _Bastanteo.BastanteoCombinacion = BastanteoCombinacion;
            _Bastanteo.BastanteoLimite = BastanteoLimite;
            _Bastanteo.BastanteoVigencia = BastanteoVigencia;





            return BastDao.Crear(_Bastanteo);
        }



        public ICollection<Bastanteos> ObtenerTodosBastanteos()
        {

            ICollection<Bastanteos> _bastanteos = null;

            _bastanteos = BastDao.Listar();

            return _bastanteos;

        }


        public ICollection<Bastanteos> ObtenerBastanteosPorRuc(string Ruc)
        {

            ICollection<Bastanteos> _bastanteos = null;

            if (Ruc == null)
            {
                throw new DatosInsuficientesException("Tiene que ingresar El Ruc para poder buscar");
            }

            ClienteDAO ClienteDao = new ClienteDAO();
            foreach (Bastanteos item in BastDao.Listar())
            {
                Cliente _clienteEncontrado = ClienteDao.Obtener(item.ClienteId);

                if (_clienteEncontrado== null)
                {
                    throw new Exception("No existe el Cliente con el Ruc Buscado");
                }
                else { 
                    
                    if(_clienteEncontrado.ClienteRuc == Ruc){
                        _bastanteos.Add(item);
                    }
                }


            }

            return _bastanteos;

        }


         public ICollection<Bastanteos> ObtenerBastanteosPorCodigoCliente(string CodigoCliente)
        {

            ICollection<Bastanteos> _bastanteos = null;

            if (CodigoCliente == null)
            {
                throw new DatosInsuficientesException("Tiene que ingresar Codigo del Cliente para poder buscar");
            }

            ClienteDAO ClienteDao = new ClienteDAO();
            foreach (Bastanteos item in BastDao.Listar())
            {
                Cliente _clienteEncontrado = ClienteDao.Obtener(item.ClienteId);

                if (_clienteEncontrado== null)
                {
                    throw new Exception("No existe el Cliente con el Ruc Buscado");
                }
                else { 
                    
                    if(_clienteEncontrado.ClienteId == CodigoCliente){
                        _bastanteos.Add(item);
                    }
                }


            }

            return _bastanteos;

        }

        public ICollection<Bastanteos> ObtenerBastanteosPorRazonSocial(string RazonSocial)
        {

            ICollection<Bastanteos> _bastanteos = null;

            if (RazonSocial == null)
            {
                throw new DatosInsuficientesException("Tiene que ingresar la Razon Social para poder buscar");
            }

            ClienteDAO ClienteDao = new ClienteDAO();
            foreach (Bastanteos item in BastDao.Listar())
            {
                Cliente _clienteEncontrado = ClienteDao.Obtener(item.ClienteId);

                if (_clienteEncontrado== null)
                {
                    throw new Exception("No existe el Cliente con la Razon Social Buscado");
                }
                else { 
                    
                    if(_clienteEncontrado.ClienteRazonSocial == RazonSocial){
                        _bastanteos.Add(item);
                    }
                }


            }

            return _bastanteos;

        }

        public Bastanteos ObtenerBastanteoPorId(int BastanteoId) {

            Bastanteos _bastanteo = null;


            if (BastanteoId <= 0)
            {
                throw new DatosInsuficientesException("Tiene que ingresar la Razon Social para poder buscar");
            }


            BastanteosDAO _bastanteoDao = new BastanteosDAO();

            _bastanteo = _bastanteoDao.Obtener(BastanteoId);

            return _bastanteo; 

        }

        public void EliminarBastanteoPorId(int BastanteoId)
        {

            Bastanteos _bastanteo = null;


            if (BastanteoId <= 0)
            {
                throw new DatosInsuficientesException("Tiene que ingresar la Razon Social para poder buscar");
            }


            BastanteosDAO _bastanteoDao = new BastanteosDAO();
            _bastanteo = _bastanteoDao.Obtener(BastanteoId);
             _bastanteoDao.Eliminar(_bastanteo); 


        }

    }
}